<?php

$mcrp = './';
include('functions/session.php');
include('skin/default.php');

$SkinTitle = 'µContest - Pour débuter';
if(isset($_GET['p']) && is_numeric($_GET['p']))
	$p = $_GET['p'];
else
	$p = 0;
 
include('skin/header.php');

?>

<div class="mc_box">
	<h3>Pour débuter</h3>
	<div class="mc_contest_view_text">
			<p>
			µContest, c'est quoi? Comment participer? Comment résoudre les épreuves proposées? Quel langage? Vous trouverez toutes les réponses à vos questions 
			dans cette partie. Pour des questions plus spécifiques vous pouvez les poser sur le forum.
			</p>
			
			
			<ul>
				<li><a href="?p=0">Présentation</a></li>
				<li><a href="?p=1">Résoudre une épreuve</a></li>
				<li><a href="?p=2">Utilisation de la bibliothèque µContest pour se connecter au site</a></li>
				<li><a href="#" onclick="return false;">Installation de la bibliothèque µContest sur votre ordinateur</a>
					<ul>
						<li><a href="?p=31">Visual studio (windows)</a></li>
						<li><a href="?p=32">Code::Blocks (windows, linux)</a></li>
						<li><a href="?p=33">GNU GCC (windows, linux)</a></li>
					</ul>
				</li>
				<li><a href="?p=4">Exemple de résolution d'une épreuve</a></li>
				<li><a href="?p=5">Documentation technique de la bibliothèque µContest</a></li>
				<li><a href="interface.php">Détails de l'interface site/programmes</a></li>
			</ul>
			
			<?php if($p == 0) { ?>
			<h3 id="mc_begin_pres">Présentation</h3>
			<p>µContest est un site sur lequel sont disponibles des épreuves de programmation. Pour y participer, vous devez vous
			<a href="register.php">inscrire</a> sur le site, et résoudre les épreuves grâce à vos propres programmes, dans le langage de votre choix.
			 A chaque épreuve est associé un nombre de
			points, relatif à sa difficulté (<a href="law.php">Loi d'attribution des points</a>). Lorsque vous validez une épreuve, ce nombre de points est
			ajouté à votre total, ce qui permet donc d'établir un <a href="rank.php">classement</a>.
			</p>
			<?php } else if($p == 1) { ?>
			<h3 id="mc_begin_resoudre">Résoudre une épreuve</h3>
			<p>
				Pour valider une épreuve, vous devez concevoir un programme qui résoud le problème posé en fonction des différents paramètres
				de celle-ci. Le site est fait de telle sorte que votre programme doit être capable de communiquer avec lui pour
				récupérer ces paramètres d'une part, et pour renvoyer la réponse calculée d'autre part. Vous pouvez concevoir votre programme
				dans n'importe quel langage, pour peu que vous développiez les fonctions nécessaires à cette interface entre votre programme
				(tournant sur votre machine) et le site. Cependant, nous avons déjà développé des fonctions très simples d'utilisation en C++ 
				pour que cette interface ne soit pas un problème (qui d'ailleurs ne serait pas d'un grand interêt) : C'est la bibliothèque µContest
				(voir section suivante). <b>Si vous voulez développer vous même vos fonctions, dans un autre langage par exemple, voici la page qui
				décrit l'interface et le protocole de communication avec le site : <a href="interface.php">Interface</a>.</b><br />
				Il est donc conseillé de coder en C/C++ pour pouvoir utiliser ces fonctions. Notez que pour ceux qui programment en C, il suffit
				de compiler avec un compilateur	C++ (g++ au lieu de gcc par exemple sous Linux), et de garder vos habitudes de programmation.
			</p>
			<p>
				Si vous ne connaissez pas le C/C++, je vous recommande le cours de C de M@teo sur le
				<a href="http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html">Site Du Zero</a>, qui est très bien fait
				et très didactique. Il est également très bien expliqué comment choisir son compilateur et comment l'utiliser. Un cours de
				C++ existe également sur le site, mais requiert que vous maitrisiez le C avant de commencer.
			</p>
			
			<p>
				La page d'une épreuve contient toujours les informations suivantes :<br />
				<ul>
					<li>L'ID de l'épreuve</li>
					<li>Une description</li>
					<li>Les variables à récupérer pour résoudre l'épreuve et celles à renvoyer pour valider</li>
					<li>Des statistiques</li>
				</ul>
				- L'ID de l'épreuve est son numéro, qui est unique. C'est ce qui permet de l'identifier et de vous connecter à elle depuis votre
				programme.<br />
				- La description contient toutes les explications sur ce que vous avez à faire pour valider l'épreuve.<br />
				- Les variables à récupérer sont des paramètres de l'épreuve en question qui varient d'un essai sur l'autre. Le but est d'éviter
				qu'on puisse résoudre une épreuve "à la main", ou en plus de temps que celui qui est alloué. Par exemple, une épreuve peut vous demander
				d'additionner deux nombres et de renvoyer le résultat, mais ces deux nombres, que vous devez récupérer grâce aux fonctions de la
				bibliothèque µContest, sont toujours différents et générés aléatoirement par le site.
				Les variables à renvoyer sont le résultat produit par votre programme, c'est la solution à l'épreuve qui peut être sous forme d'une variable
				(un nombre par exemple), ou plusieurs variables.<br />
				- Les statistiques sont par exemple le pourcentage de validations de l'épreuve en question.
			</p>
			
			<?php } else if($p == 2) { ?>
			<h3 id="mc_begin_biblio">Utilisation de la bibliothèque µContest pour se connecter au site</h3>
			<p>
			Tout d'abord, il me semble intéressant pour ceux qui ne connaissent pas de donner la définition d'une bibliothèque (Wikipedia) : <br />
			<blockquote><i>
			En informatique, une bibliothèque ou bibliothèque de programmes est un ensemble de fonctions utilitaires, regroupées et mises à 
			disposition afin de pouvoir être utilisées sans avoir à les réécrire. Les fonctions sont regroupées de par leur appartenance à un
			même domaine conceptuel (mathématique, graphique, tris, etc). Les bibliothèques logicielles se distinguent des exécutables dans la
			mesure où elles ne représentent pas une application. Elles ne sont pas complètes, elles ne possèdent pas l'essentiel d'un programme 
			comme une fonction principale et par conséquent ne peuvent pas être exécutées directement. Les bibliothèques peuvent regrouper des 
			fonctions simples (par exemple le calcul d'un cosinus, ou l'inversion d'une matrice) comme des fonctions complexes avec de nombreuses 
			fonctions internes non accessibles directement. L'intérêt des bibliothèques réside dans le fait qu'elles contiennent du code utile que
			l'on ne désire pas avoir à réécrire à chaque fois.
			</i></blockquote>
			µContest est donc une bibliothèque qu'on a développé pour éviter de recoder les fonctions de connexion au site à chaque fois. En plus, cela
			présente l'avantage de ne pas avoir à vous soucier de cet aspect de la programmation qui ne fait pas partie de l'épreuve.<br />
			Cette bibliothèque se présente sous forme de trois fichiers :
			<ul>
				<li>microcontest.h : Ce fichier contient les définitions des fonctions de la bibliothèque, que vous devez inclure dans votre programme
				pour qu'il puisse les utiliser.</li>
				<li>libmicrocontest.lib (Windows) ou libmicrocontest.a (Linux) : Ce sont les fonctions déjà compilées. Vous devez configurer votre
				compilateur pour qu'il sache que c'est dans ce fichier qu'il doit aller chercher le code compilé des fonctions de la
				bibliothèque pour l'ajouter à votre programme (bibliothèque statique). <u>Ce fichier est celui à configurer lorsque vous
				compilez votre programme en mode Release. Ce n'est habituellement pas ce mode qui est utilisé lors d'une phrase de développement.</u></li>
				<li>libmicrocontestd.lib (Windows) ou libmicrocontestd.a (Linux) : Même description que libmicrocontest.lib/a. <u>Ce fichier est celui à
				configurer lorsque vous	compilez votre programme en mode Debug. C'est le mode de compilation par défaut.</u></li>
			</ul>
			Ces fichiers sont disponibles dans la rubrique <a href="download.php">Téléchargements</a> en fonction de votre système. La
			rubrique suivante explique en détail comment installer ces fichiers sur votre ordinateur et comment configurer correctement
			votre IDE (Environnement de développement), ou simplement votre compilateur, pour utiliser la bibliothèque.
			</p>
			
			<?php } else if($p == 31) { ?>
			<h3 id="mc_begin_instalbiblio">Installation de la bibliothèque µContest pour Visual studio</h3>
			<p>
				Tout d'abord, commencez par placer les trois fichiers que vous avez <a href="download.php">téléchargés</a> dans le répertoire de votre
				projet, à côté de vos fichiers de code.
				Il faut maintenant indiquer à Visual Studio qu'il doit utiliser la bibliothèque µContest. Pour cela, ouvrez les propriétés de votre projet 
				(menu Projet / Propriétés ou Alt + F7), puis allez dans le menu Editeur de liens / entrée (ou Linker / Input). A la ligne 
				Dépendances supplémentaires (ou Additional dependencies), ajoutez la bibliothèque de µContest :<br />
				- <b>libmicrocontestd.lib</b> si vous compilez votre programme en Debug (option par défaut lors de la création du projet)<br />
				- <b>libmicrocontest.lib</b> si vous compilez en Release.<br />
				<center><img src="img/vs_prop.png" /></center>
				<br />
				Enfin, dans les fichiers de code dans lesquels vous utilisez les <a href="?p=5">fonctions de la bibliothèque</a>, rajoutez le fichier
				d'entête suivant :<br />
				<code>#include "microcontest.h"</code><br />
				
			</p>
			
			<?php } else if($p == 32) { ?>
			<h3 id="mc_begin_instalbiblio">Installation de la bibliothèque µContest pour Code::Blocks</h3>
			<p>
				Tout d'abord, commencez par placer les trois fichiers que vous avez <a href="download.php">téléchargés</a> dans le répertoire de votre
				projet, à côté de vos fichiers de code. Attention : Vérifiez bien que la version que vous téléchargée est compatible avec le compilateur
				que vous avez configuré dans Code::Blocks. En règle générale, c'est MinGW (GNU GCC) qui est installé avec, et dans ce cas vous êtes
				dans la situation décrite sur cette page; sinon, il suffit de télécharger la bibliothèque qui correspond à votre compilateur, et la procédure
				est la même.<br />
				Il faut maintenant indiquer à Code::Blocks qu'il doit utiliser la bibliothèque µContest. Pour cela, ouvrez les propriétés de build de votre projet 
				(menu Project / Build Options), puis allez dans l'onglet Linker Settings.<br />
				A gauche, vous devez avoir Debug et/ou Release, en fonction de ce que vous avez configuré lors de la création du projet. Sélectionner soit
				l'un, soit l'autre, permet de faire des configurations relatives à ce mode de compilation uniquement. C'est utile puisque la bibliothèque
				est constituée de deux fichiers : Un pour le mode Release (libmicrocontest.a), un pour le mode Debug (libmicrocontestd.a).<br /><br />
				
				Sélectionnez alors le mode de compilation que vous utilisez, et ajoutez le fichier de librairie qui correspond. A nouveau :<br />
				- <b>libmicrocontestd.a</b> si vous compilez votre programme en Debug (option par défaut lors de la création du projet)<br />
				- <b>libmicrocontest.a</b> si vous compilez en Release.<br />
				<center><img src="img/cb_prop_d.png" />  <img src="img/cb_prop_r.png" /></center>
				<br />
				Enfin, dans les fichiers de code dans lesquels vous utilisez les <a href="?p=5">fonctions de la bibliothèque</a>, rajoutez le fichier
				d'entête suivant :<br />
				<code>#include "microcontest.h"</code><br />
				
			</p>
			
			<?php } else if($p == 4) { ?>
			<h3 id="mc_begin_example">Exemple de résolution d'une épreuve</h3>
			<p>
				Dans cette section, je vais présenter un exemple de résolution d'une épreuve. Pour ça j'ai choisi l'épreuve <a href="http://www.microcontest.com/contest.php?id=1">Somme de deux entiers</a>
				dont l'ID est le 1. Comme son nom l'indique, on doit additionner deux nombres et renvoyer le résultat ^^.
				La <a href="http://www.microcontest.com/contest.php?id=1">page de l'épreuve</a> nous indique ce qu'on doit faire et les variables à récupérer et à renvoyer. On voit qu'on doit récupérer
				deux entiers, dont les noms sont 'a' et 'b'. Ces noms sont des identificateurs qui permettent d'accéder aux valeurs depuis votre programme.<br />
				
				Les exemples de codes que je vais donner sont en C mais le principe reste exactement le même en C++, et les fonctions que je présente
				sont les fonctions de la bibliothèque µContest (<a href ="contact.php">Contactez nous</a> si vous voulez les reprogrammer, si vous codez dans
				un autre langage par exemple).<br /> 
				Dans un premier temps, on doit se connecter à l'épreuve :<br /><br />
				<code>
					Commencer_Epreuve(1, "pseudo", "mot de passe");
				</code><br /><br />
				
				Commencer_Epreuve prend en premier argument l'ID de l'épreuve à laquelle on veut se connecter. Ses deuxième et troisième arguments sont
				le pseudo et le mot de passe, pour la connexion à votre compte.<br />
				Cette fonction renvoie un entier pour indiquer si elle a réussi ou non, voir la <a href="#begin_doc">documentation technique</a> de la librairie
				µContest ci-dessous pour voir le détail. Nous ne testerons ici que la réussite de la connexion sans identifier l'erreur grâce au code :
				<br /><br />
				
				<code>
					if(Commencer_Epreuve(1, "pseudo", "mot de passe") == MC_OK) //MC_OK est défini dans microcontest.h<br />
					{<br />
						//Instructions si connexion réussie...<br />
					}<br />
					else<br />
					{<br />
						//Instructions si connexion échouée...<br />
					}<br />
				</code><br />
				
				A partir de là, la fonction Commencer_Epreuve a récupéré les variables de l'épreuve et un chronomètre a été déclenché sur le site. <b>Vous n'avez
				à ce moment là plus que 3 sec pour renvoyer la réponse. Si vous dépassez ce temps, même si la réponse est bonne, l'épreuve ne sera pas validée !</b>
				Pour accéder aux variables récupérées, vous devez utiliser la fonction GetParam (qui est surchargée). Par exemple, pour récupérer le contenu de la
				variable 'a' de l'épreuve, on va écrire : <br/><br />
				<code>
					int Variable = 0;<br />
					GetParam("a", &Variable); //Cette fonction doit être appelée après la connexion à l'épreuve !
				</code><br /><br />
				
				Cette fonction étant surchargée, le type de la variable qu'on veut remplir n'est pas forcément <code>int</code>. Voici ses définitions :<br />
				<br />
				<code>
					bool GetParam(char *Identificateur, int *Variable_int);<br />
					bool GetParam(char *Identificateur, float *Variable_float);<br />
					bool GetParam(char *Identificateur, char **Variable_char, int *Longueur);<br />
				</code><br />
				
				Notons qu'il n'est pas possible de faire de telles déclarations en C, mais pour ceux qui codent en C l'utilisation de ces fonctions se fait
				de la même manière que d'habitude (le compilateur choisit la fonction de la bibliothèque à utiliser en fonction de la concordance avec les
				définitions).<br />
				Après avoir récupéré les deux entiers 'a' et 'b', qu'on a enregistrés dans les variables Variable1 et Variable2 par exemple, on en fait la somme
				et on ajoute cette variable aux réponses à renvoyer. Ici l'épreuve ne demande de renvoyer qu'une variable, dont l'identificateur est 's', mais 
				il se peut que certaines épreuves en demandent plusieurs. Pour cela on écrit :
				<br /><br />
				<code>
				int Somme = Variable1 + Variable2;<br />
				AjouterReponse('s', Somme);<br />
				EnvoyerReponse();
				</code>
				<br /><br />
				AjouterReponse n'envoie pas directement les résultats au site, elle se contente de constuire la réponse finale composée de tous les résultats à retourner.
				Vous pouvez donc l'appeler plusieurs fois pour ajouter les différentes réponses attendues. Notez que cette fonction est également surchargée :
				<br /><br />
				<code>
				bool AjouterReponse(char *Identificateur, int Variable);<br />
				bool AjouterReponse(char *Identificateur, float Variable);<br />
				bool AjouterReponse(char *Identificateur, char *Variable, int Longueur = 0);
				</code>
				<br /><br />
				Vous pouvez donc ajouter des <code>int</code>, <code>float</code> et <code>char *</code>.<br />
				C'est seulement EnvoyerReponse qui envoie les résultats. Cette fonction retourne le nombre de points que vous avez gagnés : <br />
				- Le nombre de points gagnés si vous avez réussi <br />
				- 0 si vous avez échoué<br />
				- Un entier négatif si il y a eu une erreur, voir la <a href="#begin_doc">documentation technique</a> ci-dessous pour les détails.<br />
				<br /><br />
				Pour résumer, voici le code complet qui permet de résoudre cette épreuve :
				<br /><br />
				
				Version C :
				<center>
					<pre class="brush: cpp;">
					#include &lt;stdio.h&gt;
					#include "microcontest.h"
					
					int main()
					{
						int Variable1 = 0;
						int Variable2 = 0;
						int Somme = 0;
						int ret = 0;
						
						printf("Connexion a l'epreuve...\n");
						
						ret = Commencer_Epreuve(1, "pseudo", "mot de passe");
						if(ret == MC_OK)
						{
							GetParam("a", &Variable1);
							GetParam("b", &Variable2);
							
							Somme = Variable1 + Variable2;
							
							AjouterReponse("s", Somme);
							ret = EnvoyerReponse();
							if(ret &gt; 0)
								printf("-&gt; Vous avez gagne %d points !\n", ret);
							else if(ret == 0)
								printf("-&gt; Vous avez echoue !\n");
							else
								printf("-&gt; Une erreur s'est produite (code : %d)\n", ret);
						}
						else
							printf("-&gt; Erreur lors de la connexion (code : %d)\n", ret);
						
						return 0;
					}
					</pre>
				</center>

				Version C++:
				<center>
					<pre class="brush: cpp;">
					#include &lt;iostream&gt;
					#include "microcontest.h"
					
					using namespace std;
					
					int main()
					{
						int Variable1 = 0;
						int Variable2 = 0;
						int Somme = 0;
						int ret = 0;
						
						cout &lt;&lt; "Connexion a l'epreuve..." &lt;&lt; endl;
					
						ret = Commencer_Epreuve(1, "pseudo", "mot de passe");
						if(ret == MC_OK)
						{
							GetParam("a", &Variable1);
							GetParam("b", &Variable2);
							
							Somme = Variable1 + Variable2;
							
							AjouterReponse("s", Somme);
							ret = EnvoyerReponse();
							if(ret &gt; 0)
								cout &lt;&lt; "-&gt; Vous avez gagne " &lt;&lt; ret &lt;&lt; " points !" &lt;&lt; endl;
							else if(ret == 0)
								cout &lt;&lt; "-&gt; Vous avez echoue !" &lt;&lt; endl;
							else
								cout &lt;&lt; "-&gt; Une erreur s'est produite (code : " &lt;&lt; ret &lt;&lt; ")" &lt;&lt; endl;
						}
						else
							cout &lt;&lt; "-&gt; Erreur lors de la connexion (code : " &lt;&lt; ret &lt;&lt; ")" &lt;&lt; endl;
						
						return 0;
					}
					</pre>
				</center>
			</p>
			
			<?php } else if($p == 5) { ?>
			<h3 id="mc_begin_doc">Documentation technique de la bibliothèque µContest</h3>
			<p>
			Cette partie contient la documentation technique de la bibliothèque µContest nécessaire à la résolution des épreuves. Comme expliqué précédement,
			(bien que non indispensables), les fonctions de cette bibliothèque facilitent grandement l'interface entre votre programme et le site, ce qui
			vous permet de ne pas vous soucier de cet aspect de la programmation, et de vous concentrer sur le réel problème de l'épreuve. Vous pouvez
			télécharger la bibliothèque sur <a href="download.php">cette page</a>. Voici le détail des définitions (microcontest.h) :
			</p>
			<br />
			
			<table id="mc_tech_doc" class="mc_table">
				<tr>
					<td>
						<center><b><u>Fonction 
						<code>
						Commencer_Epreuve
						</u></code></b></center><br /><br />
						<u>Prototype</u> : <code>int Commencer_Epreuve(int ID_Epreuve, char *Pseudonyme, char *Mot_de_passe);</code><br />
						<u>Description</u> : Permet de se connecter à l'épreuve identifiée par ID_Epreuve via un compte existant sur le site pour récupérer
						les valeurs des variables relatives à cette épreuve. Une fois appelée, cette fonction remplit une structure avec les valeurs
						obtenues qui peuvent être récupérées grâce à la fonction <code type="ccp">GetParam</code><br />
						<u>Arguments :</u><br />
						<ul>
							<li><code>int ID_Epreuve</code> : C'est l'identificateur de l'épreuve à laquelle on veut se connecter. Cet identificateur
							est indiqué sur le site sur la page de l'épreuve en question.</li>
							<li><code>char *Pseudonyme</code> : Une chaine de caractères correspondant à votre pseudonyme sur le site.</li>
							<li><code>char *Mot_de_passe</code> : Une chaine de caractères correspondant au mot de passe associé.</li>
						</ul>
						<u>Valeur de retour</u> : Entier. Si cette valeur de retour vaut : <br />
						<ul>
							<li>MC_OK (= 0) : La connexion a réussi, vous pouvez appeler <code>GetParam</code></li>
							<li>MC_ERREUR_VERSION (= -1) : La connexion a échoué car la version de la bibliothèque n'est pas à jour. Retéléchargez-la sur la
							page de <a href="download.php">téléchargements</a>.</li>
							<li>MC_ERREUR_CONNEXION (= -2) : La connexion a échoué car vous n'êtes pas connecté à Internet</li>
							<li>MC_ERREUR_IDENTITE (= -3) : La connexion a échoué car vos identifiants sont invalides.</li>
							<li>MC_ERREUR_MEMOIRE (= -4) : Une erreur est survenue lors de l'allocation mémoire destinée à récupérer les données.</li>
							<li>MC_ERREUR_FORMAT (= -5) : Le site a renvoyé un résultat inattendu. <a href="contact.php">Contactez</a> un administrateur
							si cette erreur se présente.</li>
							<li>MC_ERREUR_INCONNUE (= -6) : Une erreur inconnue est survenue.</li>
						</ul>
					</td>
				</tr>
				<tr>
					<td>
						<center><b><u>Fonction 
						<code>
						GetParam
						</u></code></center><br /><br /></b>
						<u>Prototypes</u> : <br />
						<ul>
							<li><code>bool GetParam(char *Identificateur, int *Variable_int);</code></li>
							<li><code>bool GetParam(char *Identificateur, float *Variable_float);</code></li>
							<li><code>bool GetParam(char *Identificateur, char **Variable_char, int *Longueur);</code></li>
						</ul>
						<u>Description</u> : Permet de récupérer les valeurs des variables téléchargées depuis le site par la fonction
						<code>Commencer_Epreuve</code>. Ces variables sont stockées dans une structure et associées à un 
						identificateur (donné sur la page de l'épreuve). C'est grâce à celui-ci que vous pouvez récupérer la valeur
						de telle ou telle variable. Cette fonction requiert d'avoir appelé avec succès la fonction <code>Commencer_Epreuve
						</code> avant son appel.<br />
						<u>Arguments :</u><br />
						Cette fonction est surchargée, c'est à dire que concrètement elle existe en trois exemplaires dans la bibliothèque, qui sont
						codés différement. Quand vous appelez cette fonction, c'est la version qui correspond aux types des paramètres que vous lui
						passez qui est appelée.<br />
						<ul>
							<li>Premier argument : <code>char *Identificateur</code> : Dans tous les cas le premier argument est l'identificateur
							de la variable dont vous voulez récupérer la valeur. Cette chaine de caractère est indiquée sur la page de l'épreuve sur le site.</li>
							<li>Deuxième argument : Peut être : <br />
							- <code>int *Variable_int</code> : Un pointeur sur une variable de type <code>int</code> que
							vous devez avoir précédement déclarée. <code>GetParam</code> remplira cette variable avec la valeur voulue.<br />
							- <code>float *Variable_float</code> : Un pointeur sur une variable de type <code>float</code> que
							vous devez avoir précédement déclarée. <code>GetParam</code> remplira cette variable avec la valeur voulue.<br />
							- <code>char **Variable_char</code> : Un pointeur sur un pointeur de variable de type <code>char</code>, 
							pointeur de variable de type <code>char</code> que vous devez avoir précédement déclaré. 
							<code>GetParam</code> modifiera la valeur du pointeur pour qu'il pointe sur la chaine de caractère que vous
							voulez récupérer. L'utilisation de ce prototype implique l'existence du troisième argument.
							</li>
							<li>Troisième argument : <code>int *Longueur</code> : Un pointeur sur une variable de type <code>int</code>
							que	vous devez avoir précédement déclarée. Cette variable recevra la longueur de la chaîne de caractère que vous voulez
							récupérer (et qui sera pointée par Variable_char).</li>
						</ul>
						<u>Valeur de retour</u> : Un booléen. Si l'identificateur demandé existe et que la fonction réussi, elle renvoie <code>true
						</code>, sinon elle renvoie <code>false</code>. Pour ceux qui codent en C, vous pouvez faire un cast pour convertir
						la valeur de retour en entier, et true correspond alors à 1 et false à 0. Ceci se fait de la manière suivante : <br />
						<code>
						float Reel_A_Recuperer = 0;<br />
						int ret = (int)GetParam("pi", &Reel_A_Recuperer);
						</code>
						<br />
						<br />
					</td>
				</tr>
				<tr>
					<td>
						<center><b><u>Fonction 
						<code>
						AjouterReponse
						</u></code></center><br /><br /></b>
						<u>Prototypes</u> : <br />
						<ul>
							<li><code>bool AjouterReponse(char *Identificateur, int Variable);</code></li>
							<li><code>bool AjouterReponse(char *Identificateur, float Variable);</code></li>
							<li><code>bool AjouterReponse(char *Identificateur, char *Variable, int Longueur = 0);</code></li>
						</ul>
						<u>Description</u> : Permet d'ajouter une variable à la réponse que <code>EnvoyerReponse</code> va envoyer au site.
						Cette réponse peut donc être composée de plusieurs variables (suivant les exigences de l'épreuve, les variables à renvoyer
						sont indiquées sur la page de l'épreuve en question). <b>Cette fonction n'envoie rien au site</b>, elle se contente de construire
						la réponse qui sera envoyée. Elle peut donc être appelée plusieurs fois.<br />
						<u>Arguments</u> :<br />
						Cette fonction est surchargée, c'est à dire que concrètement elle existe en trois exemplaires dans la bibliothèque, qui sont
						codés différement. Quand vous appelez cette fonction, c'est la version qui correspond aux types des paramètres que vous lui
						passez qui est appelée.<br />
						<ul>
							<li>Premier argument : <code>char *Identificateur</code> : Dans tous les cas le premier argument est l'identificateur
							de la variable que vous voulez envoyer au site. Cette chaine de caractère est indiquée sur la page de l'épreuve sur le site.</li>
							<li>Deuxième argument : Peut être : <br />
							- <code>int Variable</code> : Un entier. C'est la valeur que vous voulez renvoyer au site.<br />
							- <code>float Variable</code> : Un réel. C'est la valeur que vous voulez renvoyer au site.<br />	
							- <code>char *Variable</code> : Une chaine de caractère. C'est la valeur que vous voulez renvoyer au site. Dans ce 
							cas particulier, un troisième argument peut être précisé, qui correspond à la longueur de cette chaîne. Cette précision
							est obligatoire dans le cas ou cette chaîne contient des valeurs nulles (image par exemple), car si tel est le cas, la fonction
							ne saura pas ou s'arrête le tableau, et l'arrêtera par défaut à la première valeur nulle rencontrée.
							</li>
							<li>Troisième argument : <code>int Longueur = 0</code> : Entier indiquant la longueur du tableau passé en paramètre
							au deuxième argument. Cet argument est facultatif et si il n'est pas passé en paramètre, sa valeur vaut 0 par défaut. 
							<code>AjouterReponse</code> considère alors <code>strlen(Variable)</code> comme longueur du tableau
							<code>Variable</code>.</li>
						</ul>
						
						<u>Valeur de retour</u> : Un booléen. Si l'identificateur demandé existe et que la fonction réussi, elle renvoie <code>true
						</code>, sinon elle renvoie <code>false</code>. Pour ceux qui codent en C, vous pouvez faire un cast pour convertir
						la valeur de retour en entier, et true correspond alors à 1 et false à 0. Ceci se fait de la manière suivante : <br />
						<code>
						float Reel_A_Recuperer = 0;<br />
						int ret = (int)GetParam("pi", &Reel_A_Recuperer);
						</code>
						<br /><br />
					</td>
				</tr>
				<tr>
					<td>
						<center><b><u>Fonction 
						<code>
						EnvoyerReponse
						</u></code></center><br /><br /></b>
						<u>Prototype</u> : <code>int EnvoyerReponse(void);</code><br />
						<u>Description</u> : Permet d'envoyer au site les réponses enregistrées par les appels à <code>AjouterReponse</code>.<br />
						<u>Arguments</u> : Aucun<br />
						<u>Valeur de retour</u> : Entier. Si cette valeur de retour vaut : <br />
						<ul>
							<li>MC_ERREUR_CONNEXION (= -2) : La connexion a échoué car vous n'êtes pas connecté à Internet.</li>
							<li>MC_ERREUR_INCONNUE (= -6) : Une erreur inconnue est survenue.</li>
							<li>MC_ERREUR_REPONSE (= -7) : La fonction a échoué car aucun appel à <code>AjouterReponse</code> n'a été effectué
							avant l'appel à la fonction.</li>
							<li>0 : Vous n'avez pas validé l'épreuve.</li>
							<li>Un entier strictement positif : Vous avez validé l'épreuve et cet entier est le nombre de points gagnés.</li>
						</ul>
					</td>
				</tr>
			</table>
			<br />
		<?php } ?>
	</div>
</div>


<?php

include('skin/footer.php');

?>